﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SInvaders
{
    public class Fase1
    {
        Inimigo inimigo;
        Texture2D tiro;
        int pontos = 0;
        bool RetornoAtirarJogador;
        Jogador jogador = new Jogador(new Rectangle(400, 550, 40, 40), 3);
        List<TiroJogador> tirosJogador;
        List<TiroInimigo> tirosInimigo;
        SpriteFont fonte;
        int tempo = 0;
        int tempoFase1 = 1000;
        int numeroSorteado;
        Random r = new Random();
        

        public void Load(ContentManager Content)
        {
            tirosJogador = new List<TiroJogador>();
            tirosInimigo = new List<TiroInimigo>();

            tiro = Content.Load<Texture2D>("tiro");
            fonte = Content.Load<SpriteFont>("SpriteFont1");

          

            //linha 1
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(100, 30, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(200, 30, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(300, 30, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(400, 30, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(500, 30, 50, 50));

            //linha2
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(100, 95, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(200, 95, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(300, 95, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(400, 95, 50, 50));
            inimigo = new Inimigo(Content.Load<Texture2D>("inimigo"), new Rectangle(500, 95, 50, 50));

            jogador.LoadContent(Content);
        }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior)
        {
                inimigo.Update(gameTime);
                jogador.Update(gameTime);
                RetornoAtirarJogador = jogador.Atirar(teclado_atual, teclado_anterior);

                

                if (RetornoAtirarJogador)
                {
                    tirosJogador.Add(new TiroJogador(new Rectangle(jogador.retangulo.X + jogador.retangulo.Width / 2, jogador.retangulo.Y, 2, 10), 3, tiro, 1));
                }

                foreach (Inimigo i in Inimigo.list)
                {
                    if (i.active)
                    {

                        numeroSorteado = r.Next(0, Inimigo.list.Count);
                        tempo++;
                        if (tempo > tempoFase1)
                        {
                            tempo = 0;
                            tirosInimigo.Add(new TiroInimigo(new Rectangle(Inimigo.list[numeroSorteado].colisionEnemy.X, Inimigo.list[numeroSorteado].colisionEnemy.Y, 2, 10), 3, tiro, -1));
                        }
                    }
                }

                foreach (TiroInimigo tiro in tirosInimigo)
                {
                    tiro.Movimento();

                    if (tiro.retangulo.Intersects(jogador.retangulo))
                    {
                        GerenciadorFases.fase3.venceu = false;
                        GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.RESULTADOJOGO;
                    }
                }

                foreach (TiroJogador tiro in tirosJogador)
                {
                    tiro.Movimento();

                    
                    for (int i = 0; i < Inimigo.list.Count; i++)
                    {
                        if (tiro.retangulo.Intersects(Inimigo.list[i].colisionEnemy))
                        {
                            if (Inimigo.list[i].active)
                            {
                                Inimigo.list[i].active = false;
                                Inimigo.list.RemoveAt(Inimigo.list.IndexOf(Inimigo.list[i]));
                                GerenciadorFases.pontos += 1;
                            }
                        }
                    }
                }

                if (Inimigo.list.Count == 0)
                {
                    GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.FASE2;
                }

                foreach (Inimigo i in Inimigo.list)
                {
                    if (jogador.retangulo.Intersects(i.colisionEnemy))
                    {
                        if (i.active)
                        {
                            GerenciadorFases.fase3.venceu = false;
                            GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.RESULTADOJOGO;
                        }
                    }
                }

        }


        public void Draw(SpriteBatch spriteBatch)
        {
                inimigo.Draw(spriteBatch);
                jogador.Draw(spriteBatch);

                foreach (Tiro t in tirosJogador)
                {
                    t.Draw(spriteBatch);
                }

                foreach (Tiro t in tirosInimigo)
                {
                    t.Draw(spriteBatch);
                }

                spriteBatch.DrawString(fonte, "Pontos: " + GerenciadorFases.pontos, Vector2.Zero, Color.White);
                Ranking.InHUD();
                spriteBatch.DrawString(fonte, "Recorde: " + Convert.ToString(Ranking.Recorde), new Vector2(600, 0), Color.White);
                spriteBatch.DrawString(fonte, "vidas: " + Convert.ToString(GerenciadorFases.vida), new Vector2(300, 0), Color.White);


                if (pontos > Ranking.Recorde)
                {
                    Ranking.Recorde = GerenciadorFases.pontos;
                }
           
        }

    }
}
